home *** CD-ROM | disk | FTP | other *** search
-
- {
- > Can you add menu items to the standard popup menu of a form?
- >
- > I want to do the same thing that Borland did for their PageControl
- > component. If you right-click on the Page Control, you get the same std
- > menu but with a couple of new items inserted at the top (e.g. New Page).
- >
- > I remember reading a post asking about how to create menus at runtime.
- > I don't think it was answered through the newsgroup, so...
- > How do you create menus at runtime?
- >
-
- Do you mean add things to the right click menu when designing? Or create a popup
- when the program is running?
-
- When running simply create a TPopupMenu and assign it to the PopupMenu property.
- This can either be done at design-time or run-time. It won't show at design time
- however, since that menu is the form designers.
-
- To add items to the context menu that is shown at design-time, you need to create
- a new component editor for your component.
-
- You'll need to override GetVerbCount to return the number of items you want to
- add to the menu, and GetVerb to actually fill the list of items. You'll also
- need to override ExecuteVerb to actually do the actions.
-
- For example:
- }
-
- TMyEditor = class(TComponentEditor)
- public
- function GetVerbCount : Integer; override;
- function GetVerb(Index : Integer); override;
- procedure ExecuteVerb(Index : Integer); override;\
- end;
-
- function TMyEditor.GetVerbCount : Integer;
- begin
- Result := 2;
- end;
-
- function TMyEditor.GetVerb(Index : Integer);
- begin
- case Index of
- 0 : Result := 'Say Hi';
- 1 : Result := 'Say Bye';
- end;
- end;
-
- procedure TMyEditor.ExecuteVerb(Index : Integer);
- var
- MyMsg : String;
- begin
- case Index of
- 0 : MyMsg := 'Hi';
- 1 : MyMsg := 'Bye;
- end;
- MessageDlg(MyMsg,mtInformation,[mbOK],0);
- end;
-
- You'll also need to register the component editor in the Register proc for the
- component.
-
- procedure Register;
- begin
- RegisterComponents('My Component Page',[TMyComponent]);
- RegisterComponentEditor(TMyComponent,TMyEditor);
- end;
-